/**
 * @file tty.h
 * @author lcz (you@domain.com)
 * @brief 
 * @version 0.1
 * @date 2022-11-06
 * 
 * @copyright Copyright (c) 2022
 * 
 */

#ifndef TTY_H
#define TTY_H

#include "ipc/sem.h"

#define TTY_NR 8
#define TTY_OBUF_SIZE 512
#define TTY_IBUF_SIZE 512
#define TTY_CMD_ECHO 0x1     // 开回显
#define TTY_CMD_IN_COUNT 0x2 // 获取输入缓冲区中已有的数据量

#define TTY_CMD_ECHO 0x1

#define TTY_OCRLF (1 << 0)
// 输入标志位
#define TTY_INCLR (1 << 0)
#define TTY_IECHO (1 << 1)

// tty先进先出队列
typedef struct _tty_fifo_t
{
    char *buf;
    // buf 大小
    int size;
    // 读与写
    int read;
    int write;
    // 大小
    int count;
} tty_fifo_t;
// tty设备，控制台
typedef struct _tty_t
{
    int console_index; // 控制台索引号
    char obuf[TTY_OBUF_SIZE];
    tty_fifo_t ofifo; // 输出队列
    sem_t osem;
    char ibuf[TTY_IBUF_SIZE];
    tty_fifo_t ififo; // 输入处理后的队列
    sem_t isem;
    int oflags; // 输出标志
    int iflags; // 输入标志
} tty_t;

int tty_fifo_put(tty_fifo_t *fifo, char c);
int tty_fifo_get(tty_fifo_t *fifo, char *c);
//int tty_write(device_t *dev, int addr, char *buf, int size);
void tty_in(char ch);
void tty_select(int tty);

#endif

















